package com.wcs.exam.controller.biz.resp;

import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;

/**
 * 考试信息-公共响应对象
 */
@Data
public class ExamCommonResp implements Serializable {

    @Serial
    private static final long serialVersionUID = -4177192554713423643L;

    /**
     * 题目数量
     */
    private Integer questionCount;

    /*-------------------------------------------------- 拓展内容 --------------------------------------------------*/

    /**
     * 考试总分
     */
    private BigDecimal totalScore;

    /**
     * 及格分值
     */
    private BigDecimal passScore;

    /**
     * 考试大题
     */
    private List<ExamTitle> titles;


    /**
     * 考试-考试大题-响应对象
     */
    @Data
    public static class ExamTitle implements Serializable {

        @Serial
        private static final long serialVersionUID = -2750132088999223209L;

        /**
         * 标题ID
         */
        private Long id;

        /**
         * 标题名称
         */
        private String titleName;

        /**
         * 标题分数
         */
        private BigDecimal titleScore;

        /**
         * 题目数量
         */
        private Integer questionCount;

        /**
         * 排序
         */
        private Integer sort;

        /*-------------------------------------------------- 拓展内容 --------------------------------------------------*/

        /**
         * 考试题目
         */
        private List<Question> questions;
    }

    /**
     * 考试-题目信息-响应对象
     */
    @Accessors(chain = true)
    @Data
    public static class Question implements Serializable {

        @Serial
        private static final long serialVersionUID = 2813655202276252672L;

        /**
         * 试题ID
         */
        private Long questionId;

        /**
         * 题目类型(1:单选题、2:多选题、3:判断题、4:填空题、5:简答题)
         */
        private Integer questionType;

        /**
         * 题目分值
         */
        private BigDecimal questionScore;

        /**
         * 多选题得分方式(1:设置漏选得分、2:每个正确选项得分)
         */
        private Integer multiScoreWay;

        /**
         * 多选题得分
         */
        private BigDecimal multiScore;

        /**
         * 填空题得分方式(1:每题得分、2:每空得分)
         */
        private Integer fillScoreWay;

        /**
         * 填空题得分(设置填空题得分方式为2时使用)
         */
        private BigDecimal fillScore;

        /**
         * 排序
         */
        private Integer sort;

        /*-------------------------------------------------- 拓展内容 --------------------------------------------------*/

        /**
         * 难度等级(1:简单、2:一般、3:困难)
         */
        private Integer difficultyLevel;

        /**
         * 题目内容
         */
        private String questionTitle;

        /**
         * 填空数
         */
        private Integer optionCount;

        /**
         * 题目选项
         */
        private List<QuestionOption> options;

        /**
         * 用户答案
         */
        private String userAnswer;
    }

    /**
     * 考试-题目选项-响应对象
     */
    @Data
    public static class QuestionOption implements Serializable {

        @Serial
        private static final long serialVersionUID = -890298384397757700L;

        /**
         * 主键ID
         */
        private Long id;

        /**
         * 题目ID
         */
        private Long questionId;

        /**
         * 选项内容
         */
        private String optionContent;

        /**
         * 排序
         */
        private Integer sort;
    }
}
